<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <ul>
        <li>1</li>
        <li>2</li>
        <li>3</li>
        <li>4</li>
        <li>5</li>
        <li>6</li>
    </ul>
    <script>
        /**
         *  第一类：会改变原数组的方法 [vue]
         *          unshift shift  push  pop  reverse  sort splice
         *  第二类：带回调函数的
         *          filter  forEach  find  findIndex  every  some  map  reduce
         *  第三类：特殊的
         *          concat[合并]  slice[切片]  includes  indexOf
         * 
         */

        let users = [
            {name:'刘政男', sex:'男', salary:30000},
            {name:'赵义涵', sex:'男', salary:15000},
            {name:'张锦辉', sex:'男', salary:5},
            {name:'王亚瑞', sex:'女', salary:25000},
            {name:'王梦琪', sex:'女', salary:18000},
            undefined,
            null,
            0
        ]

        // 找到班里，薪资过2万的同学
        // let xin = users.filter(user=>{
        //     // 如果返回true，那么就保留当前项,并生成一个新数组，作为新数组中的元素
        //     return user.salary >= 20000;
        // })
        // console.log(xin);

        // let n = users.filter(Boolean);// 过滤元素，按布尔值过滤
        // console.log(n);

        users = [
            {name:'刘政男', sex:'男', salary:30000},
            {name:'赵义涵', sex:'男', salary:28000},
            {name:'张锦辉', sex:'男', salary:5},
            {name:'王亚瑞', sex:'女', salary:25000},
            {name:'王梦琪', sex:'女', salary:28000}
            
        ]
        // find 找到符合第一个条件，返回
        // findIndex 找到符合第一个条件的索引值，返回
        // let m = users.findIndex(user=>{
        //     return user.salary === 18000;
        // })

        // 每一个都符合条件，结果就是true
        // 只要有一个不符合就是false
        // let u = users.every(user=>{
        //     console.log(user);
        //     return user.salary >= 20000;
        // })
        // console.log(u);

        // 只要有一个符合的结果就是 true，都不符合才是false
        // let s = users.some(user=>{
        //     return user.salary >=40000;
        // })
        // console.log(s);


        // map : 遍历数组中的每一项，返回一个跟元素组长度一样的数组。数组中的元素，你return什么，元素就是什么
        // let newUsers = users.map(user=>{
        //     return {...user,salary:user.salary * 2}
        //     // return 1;
        // })
        // console.log(newUsers);

        // reduce
        // pre 第一次取值，取决于 reduce的第二个参数。后面取值取决于 return的内容
        // cur 当前元素
        // index : 索引

        // 需求：将班级同学的总薪资计算一下
        // 用来做累加
        let total = users.reduce((pre,cur,index)=>{
            return pre + cur.salary;
            //                 pre     cur.salary    return
            // 第一次进来：    0        30000         30000
            // 第二次          30000    28000         58000
            // 第三次          58000    5             58005
            // 第四次          58005    25000         83005
            // 第五次          83005    28000         111005

        },0);
        console.log(total);

        let arr = [1,2,3,6];
        // 检测数组中是否包括该元素，包括返回true ，不包括返回false
        console.log(arr.includes(6));
        // indexOf 返回包括元素的索引值，如果不包括，返回-1
        console.log(arr.indexOf(9));

        // concat
        let arr1 = [1,2,3];
        let arr2 = [4,5,7];

        // let arr3 = arr1.concat(arr2);
        // console.log(arr3);

        // concat 可以克隆一个数组
        let arr4 = arr1.concat([]);
        console.log(arr4);
        arr4[0] = 100;
        console.log(arr4,arr1);

        // 切片 slice(index,endIndex);  endIndex 负数
        //         0  1 2 3 4
        let arr6 = [1,2,3,4,5,6];
        // slice 也可以克隆数组
        // let arr7 = arr6.slice(0);
        // console.log(arr7);
        // arr6[0] = 10000;
        // console.log(arr6,arr7)

        // slice切片
        // let arr7 = arr6.slice(1,4);// 包括左边，不包括右边 【左闭右开】
        // arr7 = arr6.slice(0,-2);
        // console.log(arr7)


        let lis = document.querySelectorAll('li');
        console.log(lis);
        // NodeList: 类数组【像数组但不是数组】 
        // 1. 有下标
        // 2. 有length 但是不是数组，不能使用数组上的方法
        // lis.push(1);

        // 类数组转化为 普通数组
        let liArr = Array.prototype.slice.call(lis);

        liArr.push(1);
        console.log(liArr);
        






    </script>
</body>
</html>